草庐IT

C++ pragma GCC system_header 指令

全部标签

c++ - 可选的仅 header 库

我想编写一个C++库,默认情况下not-header-only但可以用作定义NOLIB宏的仅header库。我见过两种方法:内联定义foo.h#if!defined(FOO_H)#defineFOO_H#ifdefined(NOLIB)#defineMYINLINEinline#else#defineMYINLINE#endifclassfoo{//...};#ifdefined(NOLIB)#include"foo.cc"#endif#endif//includeguardfoo.cc#if!defined(NOLIB)#include"foo.h"#endifMYINLINEvoi

c++ - 在仅 header 库的类定义中实现有什么不同?

我正在开发一个大量使用模板的库,因此我决定将其设为仅包含header的库。由于声明和实现在同一个文件中,我现在可以同时进行。所以我可以在这两种风格之间做出选择://seperatedeclarationandimplementationtemplateclassKlass{public:voiddo_something();};templatevoidKlass::do_something(){//dosomething}//orbothatthesametimetemplateclassKlass{public:voiddo_something(){//dosomething}};我

c++ - 使用 clang AST 解析器忽略丢失的 header

我在Windows上,使用MSVC来编译我的项目,但我需要clang来使用它简洁的AST解析器,它允许我编写一个小代码生成器。问题是,clang无法解析MSVCheader(一个众所周知且可以理解的问题)。我尝试了两种选择:我包含MSVCheader文件夹,解析我的代码中包含的内置header最终会在某些时候导致fatalerror,阻止我正确解析我想要的部分。我之前所做的只是不提供任何内置header并转发声明我需要的类型。它工作正常,不知何故它不再适用于最新的Clang。我真的不知道关于丢失header的解析器策略是否发生了变化,但它每次都会导致完全失败,如包含在内,并没有太多被解

c++ - 最小化浪费的字节以对齐 2 个 header 之间的数据(自定义分配器)

这是自定义分配器中的内存布局:-^towardlessaddress....Header[size=16alignment=4]....(1)somewastespaceA[size=A(unknown)]content[size="SIZE"alignment="ALIGN"]....(2)somewastespaceB[size=B(unknown)]Header[size=16alignment=4]....(3)....vtowardmoreaddressHeader的确切地址事先未知。但是,我知道:-everyHeaderaddress%4==0from(1,3)"conte

c++ - Qt 上的 PRECOMPILED_HEADER 和 Subdirs 模板

我有一个大型Qt项目,分为几个静态库(大约70个)和一个应用程序,为此我使用了一个带有子目录模板的.pro文件。为了加快编译时间,我想使用预编译头,发现在每个子项目上使用PRECOMPILED_HEADER可以解决问题,但是,每个项目都单独编译预编译头(这是最慢的一步)。有没有一种方法可以在子目录模板中包含的所有子项目之间“共享”预编译头?这样预编译头就可以一次构建,并被所有子项目使用?问候 最佳答案 经过一些实验后,我发现无法在子项目之间共享预编译头文件。我认为缺少此功能背后的基本原理是每个子项目都可能更改编译器/预处理器标志,这

c++ - 当 C++ 标准提供将名称带入全局命名空间的 C header 时,这是否包括重载?

即将发布的C++0x标准的最终委员会草案说:EveryCheader,eachofwhichhasanameoftheformname.h,behavesasifeachnameplacedinthestandardlibrarynamespacebythecorrespondingcnameheaderisplacedwithintheglobalnamespacescope.Itisunspecifiedwhetherthesenamesarefirstdeclaredordefinedwithinnamespacescope(3.3.6)ofthenamespacestdanda

c++ - 在 C++ STL 类型的静态实例上使用 OpenMP threadprivate 指令

考虑以下片段:#includeclassA{staticstd::maptheMap;#pragmaompthreadprivate(theMap)};std::mapA::theMap;使用OpenMP编译失败并显示以下错误消息:$g++-fopenmp-cmain.cppmain.cpp:5:34:error:‘threadprivate’‘A::theMap’hasincompletetype我不明白这个。我可以在没有#pragma指令的情况下进行编译,这应该意味着std::map不是不完整。如果theMap是原始类型(double、int...),我也可以编译。如何创建全局静态

c++ - 如何使用 boost::spirit::lex 实现包含指令?

我有一个从spirit::lex和spirit::qi构建的简单配置文件解析器。当词法分析器到达模式include"path"时,我希望包含文件的文本。你可能知道,spirit::lexer::begin()启动扫描过程://Readfilecontentsintoastd::string...//_firstand_lastareconstchar*_first=_contents.c_str();_last=&_first[_input.size()];//_tokenisalexer::iterator_typeforthecurrenttoken_token=_lexer.be

c++ - 什么是 C++ 中用于分离 header /源的模板特化的可靠方法

在中等规模甚至大型复杂项目中,分离模板声明和定义很有用以减少编译时间。然而,在复杂的代码中,小的程序员错误可能会导致不被注意的行为改变,例如调用通用版本而不是专用版本。例子:由于错过声明,模板特化变得不可见。/////////////////////fileA.hpp/////////////////////#includetemplateclassA{public:voidfoo(){std::cerrvoidA::foo();/////////////////////fileA-foo-int.cpp/////////////////////#include"A.hpp"templ

c++ - 如何为大量 header 生成 .pch?

我的代码一直使用libcxx、sdl和其他一些库。我如何生成.pch考虑到每个header都可以包含一些其他header(即使有像#ifdef#include#endif这样的复杂条件。这就是为什么很难理解所需的头文件列表的原因。我应该只使用在中找到的所有头文件吗?那个文件夹来创建.pch?在那种情况下使用这样的.pch性能怎么样?更新:如果它很重要,我将把它与Clang(而不是GCC)一起使用,并通过ClangCAPI更具体。更新2:我已经为单个头文件创建了pch:MBA-Anton:pchasmirnov$clang++-xc++-headerheader.h-emit-pch-o